import { showNotify } from "vant";
import axios from "axios";

//封装 axios (ajax 调接口)
export const myMixin = () => {
    const errorMsgBox = (notice) => {
        showNotify({ type: "primary", message: notice });
    };

    const successMsgBox = (notice) => {
        showNotify({ type: "primary", message: notice });
    };

    const apiAll = (data, api, config = {}) => {
        axios.defaults.headers.post["Content-Type"] = "application/json";

        return async () => {
            const { method = "POST", error, defaultValue = null } = config;
            let res = null;
            try {
                if (method.toUpperCase() === "GET") {
                    res = await axios.get(api, {
                        data: data,
                    });
                } else {
                    res = await axios.post(api, data);
                }
                res = res.data;
                return res;
            } catch (e) {
                this.$message({
                    message: e.message,
                    type: "error",
                });
                if (_.isFunction(error)) {
                    await error(e);
                }
                return defaultValue;
            }
        };
    };
    const withLoading = async (asyncFunc) => {
        let res = null;
        try {
            res = await asyncFunc();
        } catch (e) {
            console.error("WithLoading Error: ", e);
        }
        return res;
    };

    return {
        errorMsgBox,
        successMsgBox,
        apiAll,
        withLoading,
    };
};
// 这段代码是一个名为`myMixin`的JavaScript函数，它返回一个包含四个方法的对象。这些方法分别是：
//
// 1. `errorMsgBox`：用于显示错误消息通知。
// 2. `successMsgBox`：用于显示成功消息通知。
// 3. `apiAll`：用于发起HTTP请求（GET或POST），并处理异常情况。
// 4. `withLoading`：用于执行异步函数，并在执行过程中显示加载状态。
//
// 这个函数可以作为Vue.js组件的混入（mixin），以便在多个组件中复用这些方法。
